package com.wmuj.mapper;

import com.wmuj.pojo.Emp;
import com.wmuj.pojo.EmpQueryParam;
import com.wmuj.pojo.PageResult;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/** 员工信息 */
@Mapper
public interface EmpMapper {
  // ---------------------------------原始的分页数据查询
  //  /** 查询总记录数 */
  //  @Select("SELECT count(*) FROM emp e LEFT JOIN dept d ON e.dept_id = d.id;")
  //  public Long count();

  /** 分页查询的方法 起始索引 */
  //  @Select(
  //      "SELECT e.*,d.name as deptName FROM emp e LEFT JOIN dept d ON e.dept_id = d.id order by
  // e.update_time desc limit #{start},#{pageSize};")
  //  public List<Emp> list(Integer start, Integer pageSize);

  // -------------------------使用插件的分页查询

  //  public List<Emp> list(String name, Integer gender, LocalDate begin, LocalDate end);

  /**
   * @param empQueryParam
   * @return
   */
  public List<Emp> list(EmpQueryParam empQueryParam);

  /**
   * 新增员工
   *
   * @param emp
   */
  @Options(useGeneratedKeys = true, keyProperty = "id") // 设置主键回填
  @Insert(
      "insert  into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time)"
          + "values (#{username},#{name},#{gender},#{phone},#{job},#{salary},#{image},#{entryDate},#{deptId},"
          + "#{createTime},#{updateTime})")
  void addInfo(Emp emp);

  /**
   * 批量删除员工信息
   *
   * @param ids
   */
  void delete(List<Integer> ids);

  /**
   * 根据id查询员工信息
   *
   * @param id
   * @return
   */
  Emp findById(Integer id);

  /**
   * 更新员工信息
   *
   * @param emp
   */
  void update(Emp emp);

  /** 查询所有员工信息 */
  @Select("select e.* from emp e")
  List<Emp> findAllList();

  /**
   * 查询员工职位数据
   *
   * @return
   */
  @MapKey("pos")
  List<Map<String, Object>> countEmpJobData();

  @MapKey("name")
  List<Map> countEmpGenderData();

  List<Integer> findEmpIdsByDeptId(Integer id);

  Emp getUsernameAndPassword(Emp emp);
}
